package com.projet.whattowatch.objet;

import java.util.ArrayList;

public class LibHumain {

	private ArrayList<Humain> listHumain;

	public LibHumain() {
		this.listHumain = new ArrayList<Humain>();
	}

	public ArrayList<Humain> getListHumain() {
		return this.listHumain;
	}

	public Humain getHumain(String id)
	{
		String[] idTable = id.split("&");
		String monNom = idTable[0];
		String monPrenom = idTable[1];

		for (int i = 0; i < listHumain.size(); i++)
		{
			if (listHumain.get(i).getNom().compareTo(monNom) == 0
					&& listHumain.get(i).getPrenom().compareTo(monPrenom) == 0)
			{
				return listHumain.get(i);
			}
		}
		return null;
	}

	public Humain getHumain(int index) {
		return listHumain.get(index);
	}

	public boolean remove(Humain monHumain) {
		return listHumain.remove(monHumain);
	}

	public void addHumain(Humain monHumain) {
		int debut = 0;
		int fin = this.getListHumain().size() - 1;
		recAddHumain(debut, fin, monHumain);
	}

	public void recAddHumain(int debut, int fin, Humain monHumain) {
		int milieu = (fin + debut) / 2;
		if (fin < 0) {
			listHumain.add(milieu, monHumain);
		} else if (fin == 0) {
			if (monHumain.compareTo(listHumain.get(milieu)) > 0) {
				listHumain.add(milieu, monHumain);
			} else {
				listHumain.add(monHumain);
			}
		} else if (monHumain.compareTo(listHumain.get(milieu)) > 0) {
			if (debut == milieu) {
				listHumain.add(milieu, monHumain);
			} else
				recAddHumain(debut, milieu, monHumain);
		} else {
			if (milieu == debut) {
				if (monHumain.compareTo(listHumain.get(fin)) > 0) {
					listHumain.add(fin, monHumain);
				} else {
					listHumain.add(monHumain);
				}
			} else
				recAddHumain(milieu, fin, monHumain);
		}
	}
	
	public ArrayList<String> search(String key){
		ArrayList<String> result = new ArrayList<String>();
		for(Humain humain : this.listHumain){
			if(humain.getNom().equals(key) || humain.getPrenom().equals(key)){
				result.add(humain.getPrenom() + " " + humain.getNom());
			}
		}
		return result;
	}
	
	
	public ArrayList<String> searchHumain(String keyword) {
		if (keyword == null) {
			// TODO
		}

		String keywordLowerCase = keyword.toLowerCase();
		ArrayList<String> resultat = new ArrayList<String>();
		for (int i = 0; i < listHumain.size(); i++) {
			String listHumainLowerCase = listHumain.get(i).getNom().toLowerCase() + " " + listHumain.get(i).getPrenom().toLowerCase();
			if (listHumainLowerCase.contains(keywordLowerCase)) {
				resultat.add(listHumain.get(i).getPrenom() + " " + listHumain.get(i).getNom());
			}
		}
		return resultat;
	}
	
	
	
}
